// ignore_for_file: depend_on_referenced_packages

import 'dart:typed_data';
import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:tiktokadult/assets_tool/images.dart';
import 'package:path/path.dart' as path;

import '../../config/address.dart';
import '../../config/config.dart';
import '../debug_log.dart';
import 'image_data_handle/image_manager.dart';

enum ImgType { avatar, cover, common, audiobook }
//
// class CustomNetworkImage extends StatefulWidget {
//   final String? imageUrl;
//   final BoxFit? fit;
//   final Widget? placeholder; //占位图
//   final Widget? errorWidget;
//   final double? width;
//   final double? height;
//   final bool? isGauss; // 高斯模糊
//   final BorderRadius? borderRadius; // 棱角
//   final double? radius; // 棱角
//   final bool? useQueue; // 是否开启队列任务
//   final double? placePadding; // 占位图padding
//   final double? loadWidth; // 图片裁剪宽度（防止图片内存过大，一般图片的ui宽度*3即可）
//   final Color? color;
//   final Size? placeSize; // 占位图 Size
//   final double? calculateWidth; // 计算size(用于全图片列表，销毁后还能占位)
//   final Function(Size)? sizeCallback;
//   const CustomNetworkImage({
//     required this.imageUrl,
//     Key? key,
//     this.radius,
//     this.fit,
//     this.width,
//     this.height,
//     this.placeholder,
//     this.borderRadius,
//     this.useQueue = false,
//     this.placePadding,
//     this.isGauss = false,
//     this.errorWidget,
//     this.loadWidth,
//     this.color,
//     this.placeSize,
//     this.calculateWidth,
//     this.sizeCallback,
//   }) : super(key: key);
//
//   @override
//   State<StatefulWidget> createState() {
//     return _CustomNetworkImageState();
//   }
// }
//
// class _CustomNetworkImageState extends State<CustomNetworkImage> {
//   Uint8List? _imageBase;
//   bool _loadingFinish = false;
//
//   static Map<String, Size> _cacheSizeMap = {};
//
//   Size? get _realSize {
//     Size? imgSize = _cacheSizeMap[_realImageUrl];
//     if (widget.calculateWidth != null && imgSize != null && imgSize.width > 0) {
//       double height = widget.calculateWidth! * imgSize.height / imgSize.width;
//       return Size(widget.calculateWidth!, height);
//     }
//     return null;
//   }
//
//   bool get isGif => widget.imageUrl?.contains(".gif") ?? false;
//
//   @override
//   void initState() {
//     super.initState();
//     // GifController(loop: true, autoPlay: true);
//     WidgetsBinding.instance.addPostFrameCallback((timeStamp) {
//       _loadImage();
//     });
//   }
//
//   @override
//   void didUpdateWidget(covariant CustomNetworkImage oldWidget) {
//     super.didUpdateWidget(oldWidget);
//     if (oldWidget.imageUrl != widget.imageUrl || (_loadingFinish && _imageBase == null)) {
//       _imageBase = null;
//       _loadImage();
//     }
//   }
//
//   String get _realImageUrl {
//     if (widget.imageUrl?.isNotEmpty != true) {
//       return "";
//     }
//     if (widget.imageUrl!.startsWith("http") || widget.imageUrl!.startsWith("https")) {
//       return widget.imageUrl!;
//     }
//
//     String rootPath = path.join(Address.baseImagePath ?? "", "imageView/1");
//     if (isGif != true &&
//         (widget.loadWidth ?? 0) > 0 &&
//         widget.loadWidth! < 1024 &&
//         widget.loadWidth?.isInfinite == false &&
//         widget.loadWidth?.isNaN == false) {
//       try {
//         rootPath = path.join(rootPath, "w/${widget.loadWidth!.toInt()}");
//         //rootPath = path.join(rootPath, "w/${widget.loadWidth!.toInt()}/h/${widget.loadHeight!.toInt()}");
//       } catch (e) {
//         debugLog(e);
//       }
//     }
//     if (widget.isGauss == true && isGif != true) {
//       rootPath = path.join(rootPath, "s/${Config.GAUSS_VALUE}");
//     }
//     rootPath = path.join(rootPath, widget.imageUrl);
//     return rootPath;
//   }
//
//   _loadImage() async {
//     _loadingFinish = false;
//     if (widget.useQueue == true) {
//       ImageManager.instance.loadImageInQueue(_realImageUrl, callback: (url, imageData) {
//         _imageBase = imageData;
//         if (_imageBase != null && (widget.calculateWidth != null || widget.sizeCallback != null)) {
//           getImageSize(_imageBase!);
//         }
//         if (mounted && _realImageUrl == url) {
//           _loadingFinish = true;
//           setState(() {});
//         }
//       });
//     } else {
//       try {
//         _imageBase = await ImageManager.instance.loadImage(_realImageUrl);
//         if (_imageBase != null && (widget.calculateWidth != null || widget.sizeCallback != null)) {
//           getImageSize(_imageBase!);
//         }
//         if (_imageBase != null && mounted) {
//           _loadingFinish = true;
//           setState(() {});
//         }
//       } catch (e) {
//         debugLog(e.toString());
//         _loadingFinish = true;
//         if (mounted) {
//           setState(() {});
//         }
//       }
//     }
//   }
//
//   Future getImageSize(Uint8List bytes) async {
//     try {
//       if (_cacheSizeMap[_realImageUrl] == null) {
//         final codec = await instantiateImageCodec(bytes);
//         final frame = await codec.getNextFrame();
//         var size = Size(frame.image.width.toDouble(), frame.image.height.toDouble());
//         _cacheSizeMap[_realImageUrl] = size;
//         widget.sizeCallback?.call(size);
//       } else {
//         widget.sizeCallback?.call(_cacheSizeMap[_realImageUrl]!);
//       }
//     } catch (e) {
//       debugLog(e);
//     }
//   }
//
//   @override
//   Widget build(BuildContext context) {
//     if (widget.borderRadius != null || (widget.radius != null && widget.radius != 0)) {
//       return ClipRRect(
//         borderRadius: widget.borderRadius ?? BorderRadius.circular(widget.radius ?? 0),
//         child: _buildImage(),
//       );
//     }
//     return _buildImage();
//   }
//
//   Widget _buildImage() {
//     return (_imageBase == null)
//         ? Container(
//             padding: EdgeInsets.all(widget.placePadding ?? 0),
//             child: widget.placeholder ?? _buildPlaceHolder(),
//           )
//         : _buildImageByType();
//   }
//
//   Widget _buildImageByType() {
//     return Image.memory(
//       _imageBase!,
//       width: widget.width ?? _realSize?.width,
//       height: widget.height ?? _realSize?.height,
//       gaplessPlayback: true,
//       fit: widget.fit ?? BoxFit.cover,
//       color: widget.color,
//       excludeFromSemantics: true,
//       colorBlendMode: widget.color != null ? BlendMode.modulate : null,
//       // cacheWidth: widget.width?.toInt(),
//       //cacheHeight: widget.height?.toInt(),
//       errorBuilder: (context, error, track) {
//         return widget.errorWidget ?? widget.placeholder ?? _buildPlaceHolder();
//       },
//     );
//   }
//
//   Widget _buildPlaceHolder() {
//     return ClipRRect(
//       borderRadius: widget.borderRadius ?? BorderRadius.circular(widget.radius ?? 0),
//       child: Container(
//           alignment: Alignment.center,
//           width: widget.width ?? _realSize?.width ?? widget.placeSize?.width ?? double.infinity,
//           height: widget.height ?? _realSize?.height ?? widget.placeSize?.height ?? double.infinity,
//           color: Color(0xff0f141d),
//           child: Image(
//             // image: () {
//             //   // if (type != null && type == ImgType.cover) {
//             //   //   return const AssetImage(AssetsImages.DEFAULT_VIDEO_COVER);
//             //   // } else if (type != null && type == ImgType.avatar) {
//             //   //   return const AssetImage(AssetsImages.USER_DEFAULT_AVATAR);
//             //   // } else if (type != null && type == ImgType.audiobook) {
//             //   //   return const AssetImage(AssetsIsges.AUDIOBOOK_DF);
//             //   // }
//             //   return const AssetImage(Assets.nutPlaceHolderImg);
//             //   //return const AssetImage(AssetsImages.DEFAULT_VIDEO_COVER);
//             // }(),
//             image: AssetImage("place_holder_logo.png".commonImgPath),
//           )),
//     );
//   }
//
//   @override
//   void dispose() {
//     //controller?.stop();
//     //controller?.dispose();
//     // PaintingBinding.instance.imageCache.clear();
//     super.dispose();
//   }
// }
